14.1.1 コンテキストのファクトリ関数
contextパッケージには、コンテキストを生成したりラップするための次のようなファクトリ関数も準備されている
アプリケーションのエントリーポイントで用いる関数
context.Background()
空の親コンテキストを返す。コンテキストがない状況(エントリーポイントなど)で使用する
https://pkg.go.dev/context#Background
キャンセルやタイムアウトを管理したい場合に用いる関数
context.WithCancel(parent Context) (ctx Context, cancel CancelFunc)
親コンテキストにキャンセル機能を追加した新しいコンテキストを生成する。cancel関数を呼び出すことで、全ての子コンテキストをキャンセルできる
https://pkg.go.dev/context#WithCancel
context.WithDeadline(parent Context, d time.Time) (Context, CancelFunc)
親コンテキストに特定の期限(デッドライン)を設定したコンテキスを生成する。指定した期限が過ぎると自動的にキャンセルされる
https://pkg.go.dev/context@go1.25.3#WithDeadline
context.WithTimeout(parent Context, timeout time.Duration) (Context, CancelFunc)
親コンテキストに特定のタイムアウトを設定したコンテキストを生成する。指定した時間が経過すると自動的にキャンセルされる
https://pkg.go.dev/context@go1.25.3#WithTimeout
特定のリクエストやゴルーチン間で値を伝播したい場合に用いる関数
context.WithValue(parent Context, key, val any) Context
親コンテキストに値を追加した新しいコンテキストを生成する。キーと値はペアで保存される
https://pkg.go.dev/context@go1.25.3#WithValue
開発期間中のデバッグに用いる関数
context.TODO() Context
空の親コンテキストを返す。コンテキストがどこから来ているか、どのように使われているか不明な場合に使用する
空のコンテキストが出発点になり、コンテキストにメタデータを追加していく。メタデータの追加はファクトリ関数を使用して既存のコンテキストをラップすることで行う